Análisis de la DATA y gráficas correspondientes
In [1]:
import pandas as pd
import plotly.express as px
import numpy as np
datos=pd.read_excel("Aspirantes_Inscritos_Facultad_Programa_Genero_Estrato_de_2015-1_a_2021-1-unicor.xlsx", sheet_name="Data formateada")
print("----------------------------------------------------------------")
print("DATOS ORIGINALES:")
print("----------------------------------------------------------------")
print(datos.head())
----------------------------------------------------------------
DATOS ORIGINALES:
----------------------------------------------------------------
PERIODO FACULTAD \
0 2015-1 Medicina Veterinaria y Zootecnia
1 2015-1 Ciencias Economicas, Jurídicas y Administrativas
2 2015-1 Ciencias de la Salud
3 2015-1 Ciencias de la Salud
4 2015-1 Ciencias Básicas
PROGRAMA TOTAL INSCRITOS \
0 Acuicultura 216
1 Adminis. en Finanzas y Negocios Internacionales 1380
2 Administración en Salud 1642
3 Bacteriología 770
4 Biología 540
SEXO FEME SEXO MASC ESTRATO 1 ESTRATO 2 ESTRATO 3 ESTRATO 4 \
0 90 126 185 24 4.0 1
1 809 571 1189 172 16.0 3
2 1052 590 1484 149 8.0 1
3 574 196 686 76 7.0 1
4 339 201 483 52 3.0 2
ESTRATO 5 ESTRATO 6
0 2 0
1 0 0
2 0 0
3 0 0
4 0 0
Se filtra la DATA y se hace la Limpieza de datos
In [4]:
#Filtrar solo por la facultad de ingenierías
facultad = ["Ingenierías"]
df_ig= datos[datos["FACULTAD"].isin(facultad)]
print("-------------------------------------------------")
print("DATA FILTRADA POR PROGRAMAS DE INGENIERÍAS")
print("-------------------------------------------------")
print(df_ig)
#Se limpian los datos nulos
print("-------------------------------------------------")
print("Información de número de datos Null por columna")
print("--------------------------------------------------")
#Se comprueba la existencia de datos Null en el dataframe conociendo la cantidad de datos NaN por columnas
print(df_ig.isnull().sum())
print("--------------------------------------------------")
print("Información de número de datos NaN por columna")
print("--------------------------------------------------")
#Se comprueba la existencia de datos NaN en el dataframe conociendo la cantidad de datos NaN por columnas
print(df_ig.isna().sum())
-------------------------------------------------
DATA FILTRADA POR PROGRAMAS DE INGENIERÍAS
-------------------------------------------------
PERIODO FACULTAD PROGRAMA TOTAL INSCRITOS SEXO FEME \
9 2015-1 Ingenierías Ingeniería Ambiental 1087 575
10 2015-1 Ingenierías Ingeniería de Alimentos 226 121
11 2015-1 Ingenierías Ingeniería de Sistemas 660 189
12 2015-1 Ingenierías Ingeniería Industrial 865 359
13 2015-1 Ingenierías Ingeniería Mecánica 408 37
.. ... ... ... ... ...
381 2021-1 Ingenierías Ingeniería Ambiental 469 250
382 2021-1 Ingenierías Ingeniería de Alimentos 218 108
383 2021-1 Ingenierías Ingeniería de Sistemas 525 74
384 2021-1 Ingenierías Ingeniería Industrial 673 262
385 2021-1 Ingenierías Ingeniería Mecánica 306 17
SEXO MASC ESTRATO 1 ESTRATO 2 ESTRATO 3 ESTRATO 4 ESTRATO 5 \
9 511 890 187 10.0 0 0
10 105 192 28 4.0 2 0
11 471 588 66 6.0 0 0
12 505 681 166 15.0 2 1
13 371 333 66 7.0 1 1
.. ... ... ... ... ... ...
381 219 395 67 7.0 0 0
382 110 202 16 0.0 0 0
383 451 424 90 9.0 1 1
384 411 524 134 14.0 1 0
385 289 246 51 8.0 1 0
ESTRATO 6
9 0
10 0
11 0
12 0
13 0
.. ...
381 0
382 0
383 0
384 0
385 0
[65 rows x 12 columns]
-------------------------------------------------
Información de número de datos Null por columna
--------------------------------------------------
PERIODO 0
FACULTAD 0
PROGRAMA 0
TOTAL INSCRITOS 0
SEXO FEME 0
SEXO MASC 0
ESTRATO 1 0
ESTRATO 2 0
ESTRATO 3 0
ESTRATO 4 0
ESTRATO 5 0
ESTRATO 6 0
dtype: int64
--------------------------------------------------
Información de número de datos NaN por columna
--------------------------------------------------
PERIODO 0
FACULTAD 0
PROGRAMA 0
TOTAL INSCRITOS 0
SEXO FEME 0
SEXO MASC 0
ESTRATO 1 0
ESTRATO 2 0
ESTRATO 3 0
ESTRATO 4 0
ESTRATO 5 0
ESTRATO 6 0
dtype: int64
In [6]:
#datos duplicados
datos_dup = df_ig.duplicated()
df_filas = df_ig[df_ig.duplicated(keep='first')] #obtendremos las filas duplicadas sin incluir la primera coincidencia
# Obtener los índices de las filas duplicadas
filas_indice = df_filas.index
total_filas_dup = len(df_filas)
print("Se marca en TRUE aquellas filas que tengas valores duplicados")
print(datos_dup)
print("----------------------------------------")
print("Se muestran el indice de filas duplicadas")
print("----------------------------------------")
print(f"Indice de filas duplicadas encontradas: {filas_indice.tolist()}")
print(f"Total filas duplicadas encontradas:{total_filas_dup}")
Se marca en TRUE aquellas filas que tengas valores duplicados
9 False
10 False
11 False
12 False
13 False
...
381 False
382 False
383 False
384 False
385 False
Length: 65, dtype: bool
----------------------------------------
Se muestran el indice de filas duplicadas
----------------------------------------
Indice de filas duplicadas encontradas: []
Total filas duplicadas encontradas:0
In [8]:
#Si se encuentras datos duplicados, estos serán eliminados
df_ig = df_ig.drop_duplicates()
print("DATAFRAME SIN DATOS DUPLICADOS")
print(df_ig)
DATAFRAME SIN DATOS DUPLICADOS
PERIODO FACULTAD PROGRAMA TOTAL INSCRITOS SEXO FEME \
9 2015-1 Ingenierías Ingeniería Ambiental 1087 575
10 2015-1 Ingenierías Ingeniería de Alimentos 226 121
11 2015-1 Ingenierías Ingeniería de Sistemas 660 189
12 2015-1 Ingenierías Ingeniería Industrial 865 359
13 2015-1 Ingenierías Ingeniería Mecánica 408 37
.. ... ... ... ... ...
381 2021-1 Ingenierías Ingeniería Ambiental 469 250
382 2021-1 Ingenierías Ingeniería de Alimentos 218 108
383 2021-1 Ingenierías Ingeniería de Sistemas 525 74
384 2021-1 Ingenierías Ingeniería Industrial 673 262
385 2021-1 Ingenierías Ingeniería Mecánica 306 17
SEXO MASC ESTRATO 1 ESTRATO 2 ESTRATO 3 ESTRATO 4 ESTRATO 5 \
9 511 890 187 10.0 0 0
10 105 192 28 4.0 2 0
11 471 588 66 6.0 0 0
12 505 681 166 15.0 2 1
13 371 333 66 7.0 1 1
.. ... ... ... ... ... ...
381 219 395 67 7.0 0 0
382 110 202 16 0.0 0 0
383 451 424 90 9.0 1 1
384 411 524 134 14.0 1 0
385 289 246 51 8.0 1 0
ESTRATO 6
9 0
10 0
11 0
12 0
13 0
.. ...
381 0
382 0
383 0
384 0
385 0
[65 rows x 12 columns]
Datos outliers
In [27]:
Q4= df_ig["SEXO FEME"].quantile(0.95)
Q1= df_ig["SEXO FEME"].quantile(0.05)
# Identificar outliers fuera de los límites
outliers = df_ig[(df_ig["SEXO FEME"] < Q1) | (df_ig["SEXO FEME"] > Q4)]
print(outliers)
PERIODO FACULTAD PROGRAMA TOTAL INSCRITOS SEXO FEME \
9 2015-1 Ingenierías Ingeniería Ambiental 1087 575
12 2015-1 Ingenierías Ingeniería Industrial 865 359
40 2015-2 Ingenierías Ingeniería Mecánica 118 5
69 2016-1 Ingenierías Ingeniería Mecánica 258 10
98 2016-2 Ingenierías Ingeniería Mecánica 133 8
125 2017-1 Ingenierías Ingeniería Ambiental 668 390
189 2018-1 Ingenierías Ingeniería Ambiental 659 327
353 2020-2 Ingenierías Ingeniería Mecánica 111 7
SEXO MASC ESTRATO 1 ESTRATO 2 ESTRATO 3 ESTRATO 4 ESTRATO 5 \
9 511 890 187 10.0 0 0
12 505 681 166 15.0 2 1
40 113 104 12 2.0 0 0
69 248 226 29 2.0 0 0
98 125 116 17 0.0 0 0
125 278 584 77 5.0 2 0
189 332 574 79 4.0 1 1
353 104 94 15 1.0 1 0
ESTRATO 6
9 0
12 0
40 0
69 1
98 0
125 0
189 0
353 0
Agrupamos por periodo la cantidad de mujeres inscritas
In [120]:
#Agrupar por Año y sumar cantidad de mujeres
df_group = df_ig.groupby('PERIODO')['SEXO FEME'].sum().reset_index()
print(df_group)
PERIODO SEXO FEME 0 2015-1 1281 1 2015-2 332 2 2016-1 602 3 2016-2 347 4 2017-1 755 5 2017-2 400 6 2018-1 757 7 2018-2 366 8 2019-1 624 9 2019-2 263 10 2020-1 711 11 2020-2 238 12 2021-1 711
Gráfica 1: Tendencia de cantidad de mujeres inscritas en los programas de ingenierías (2015-I - 2021-I)
In [123]:
#Creamos un gráfico de líneas
fig = px.line(df_group,
x='PERIODO', #Eje X: Año o Periodo
y='SEXO FEME', #Eje Y: Área Sembrada
title='Mujeres inscritas por año en la facultada de ingenierías', #Título del gráfico
labels={'PERIODO': 'Años', 'SEXO FEME': 'Mujeres inscritas'}, #Etiquetas de los ejes
markers=True
)
#Mostrar el gráfico
fig.show()
Gráfica 2 - programa de ingenierías: Tendencia mujeres inscritas vs hombres inscritos
In [126]:
#Agrupar por Año y sumar cantidad de mujeres y hombres
df_group_fm = df_ig.groupby('PERIODO')[['SEXO FEME','SEXO MASC']].sum().reset_index()
print(df_group_fm)
#Creamos un gráfico de líneas
fig = px.line(df_group_fm,
x='PERIODO', #Eje X: Año o Periodo
y=['SEXO FEME','SEXO MASC'], #Eje Y: Área Sembrada
title='Mujeres inscritas vs Hombres inscritos (2015-I - 2021-I)', #Título del gráfico
color_discrete_sequence=["rgb(255, 0, 0)","rgb(0, 0, 255)"],
markers=True #Etiquetas de los ejes
)
#Mostrar el gráfico
# Actualizar el color y tamaño del marcador
fig.update_traces(marker=dict(color='darkblue', size=10))
fig.show()
PERIODO SEXO FEME SEXO MASC 0 2015-1 1281 1963 1 2015-2 332 668 2 2016-1 602 1248 3 2016-2 347 636 4 2017-1 755 1231 5 2017-2 400 879 6 2018-1 757 1568 7 2018-2 366 833 8 2019-1 624 1227 9 2019-2 263 653 10 2020-1 711 1480 11 2020-2 238 560 12 2021-1 711 1480
Gráfica 3: Gráfica de pastel - facultades
In [33]:
#Agrupar por Año y sumar cantidad de mujeres y hombres
"""se toman los datos de la tabla original, pese a que en fila ESTRATO 3 se encontró celdas null, este no afecta las variables
tenidas en cuenta para el análisis
"""
df_group_fac = datos.groupby('FACULTAD')['SEXO FEME'].sum().reset_index()
print(df_group_fac)
#Creamos un gráfico de pastel
fig = px.pie(df_group_fac,
names='FACULTAD', #Categorías en el gráfico (eje de categorías)
values='SEXO FEME', #Valores que se representan en el gráfico
title='Mujeres inscritas por facultad (2015-I - 2021-I)', #Título
labels={'FACULTAD': 'Facultad', 'SEXO FEME': '# Mujeres inscritas'} #Etiquetas
)
#Mostrar el gráfico
fig.show()
FACULTAD SEXO FEME 0 Ciencias Agrícolas 757 1 Ciencias Básicas 3181 2 Ciencias Economicas, Jurídicas y Administrativas 8864 3 Ciencias de la Salud 15724 4 Educación y Ciencias Humanas 14296 5 Ingenierías 7387 6 Medicina Veterinaria y Zootecnia 1815
Gráfica 4: Cantidad de personas inscritas en los programas de ingenierías por estrato
In [48]:
#Creamos un gráfico de columnas
#Agrupar por Año y sumar cantidad de mujeres
df_group2 = df_ig.groupby('FACULTAD')[['ESTRATO 1', 'ESTRATO 2', 'ESTRATO 3', 'ESTRATO 4', 'ESTRATO 5', 'ESTRATO 6']].sum().reset_index()
print(df_group2)
FACULTAD ESTRATO 1 ESTRATO 2 ESTRATO 3 ESTRATO 4 ESTRATO 5 \ 0 Ingenierías 18649 2860 265.0 29 10 ESTRATO 6 0 2
In [62]:
# Transformar el DataFrame a formato largo con el método melt() para Plotly Express
df_long = df_group2.melt(id_vars='FACULTAD', var_name='Estrato', value_name='Cantidad')
#Creamos un gráfico de pastel
fig = px.pie(df_long,
names='Estrato',
values='Cantidad',
title=f'Distribución número de personas incristas por Estratos en la Facultad de ingenierías')
#Mostrar el gráfico
fig.show()
In [ ]: